SLES 15 SP3 您所在的位置:网站首页 linux 软件更新命令 SLES 15 SP3

SLES 15 SP3

2024-05-10 21:57| 来源: 网络整理| 查看: 265

6.2 RPM - 软件包管理器 # 

RPM(RPM 程序包管理器)用于管理软件包。其主要程命令为 rpm 和 rpmbuild。用户、系统管理员和软件包构建人员可以查询强大的 RPM 数据库以获得有关已安装软件的详细信息。

rpm 有五种模式:安装、卸装(或更新)软件包、重构建 RPM 数据库、查询 RPM 库或独立 RPM 存档、对软件包执行完整性检查以及对软件包签名。rpmbuild 可用于从原始源构建可安装的软件包。

用特殊的二进制格式对可安装 RPM 存档进行打包。这些存档由要安装的程序文件和某些元信息组成,这些元信息供 rpm 在安装过程中配置软件包使用或者储存在 RPM 数据库中进行存档。RPM 存档通常具有扩展名 .rpm。

提示:软件开发包

对于一些软件包,软件开发所需的组件(库、报头、包含文件等)已纳入独立的软件包中。只有当您要自己编译软件时才需要这些开发包(例如最新的 GNOME 软件包)。可以通过扩展名 -devel 确定这些开发包,例如软件包 alsa-devel 和 gimp-devel。

6.2.1 校验软件包真实性 # 

RPM 软件包具有 GPG 签名。要校验 RPM 软件包的签名,请使用 rpm --checksig  PACKAGE-1.2.3.rpm 命令确定该软件包是来自 SUSE 还是另一个可信机构。特别建议对来自互联网的更新软件包使用此命令。

修复操作系统中的问题时,您可能需要将问题临时修复 (PTF) 安装到生产系统中。SUSE 提供的软件包已使用特殊的 PTF 密钥签名。但是,与 SUSE Linux Enterprise 11 不同,SUSE Linux Enterprise 12 系统上默认不会导入此密钥。要手动导入该密钥,请使用以下命令:

tux > sudo rpm --import \ /usr/share/doc/packages/suse-build-key/suse_ptf_key.asc

导入该密钥后,您可以在系统上安装 PTF 软件包。

6.2.2 管理软件包:安装、更新和卸装 # 

安装 RPM 存档的步骤通常十分简单,执行运行:rpm -i 软件包.rpm。使用此命令可以安装软件包,但前提是满足其依赖项并且不与其他软件包冲突。如果出现错误消息,rpm 将请求那些需要安装的软件包以满足依赖项要求。在后台,RPM 数据库确保不出现冲突 - 一个特定文件只能属于一个软件包。通过选择不同的选项,您可以强制 rpm 忽略这些默认设置,但这只供专家用户使用。否则,将影响系统的完整性并可能使系统无法更新。

选项 -U 或 --upgrade 以及 -F 或 --freshen 可用于更新软件包(例如,rpm -F PACKAGE.rpm)。此命令将删除旧版本的文件并立即安装新文件。两个版本之间的差别是:-U 安装系统中以前不存在的软件包,而 -F 只更新以前安装的软件包。更新时,rpm 使用以下策略小心更新配置文件:

如果配置文件未被系统管理员更改,则 rpm 将安装适当文件的新版本。系统管理员无需执行任何操作。

如果配置文件在更新前曾被系统管理员更改,则 rpm 会以扩展名 .rpmorig 或 .rpmsave(备份文件)保存更改的文件,并安装新软件包中的版本。仅当原先安装的文件和较新的版本不同时,才执行此操作。如果是这种情况,则将备份文件(.rpmorig 或 .rpmsave)与新安装的文件进行比较,并在新文件中再次进行更改。之后,请删除所有 .rpmorig 和 .rpmsave 文件,以免以后的更新出现问题。

如果配置文件已存在并且 .spec 文件中指定了 noreplace 标签,则出现 .rpmnew 文件。

更新后,在使用 .rpmsave 和 .rpmnew 文件进行比较后应将它们删除,从而防止它们阻碍以后的更新。如果 RPM 数据库以前未能识别文件,则将为其指派扩展名 .rpmorig。

否则,将使用 .rpmsave。换句话说,.rpmorig 是从异系统格式更新为 RPM 的结果。而 .rpmsave 是从较早的 RPM 更新为较新的 RPM 的结果。.rpmnew 不提供任何有关系统管理员是否对配置文件进行过任何更改的信息。/var/adm/rpmconfigcheck 中提供这些文件的列表。不覆盖某些配置文件(如 /etc/httpd/httpd.conf)以允许继续进行操作。

-U 开关的作用并不完全等同于使用 -e 选项进行卸载以及使用 -i 选项进行安装,它还有其他作用。只要可能,就可以使用 -U。

要去除软件包,请输入 rpm -e PACKAGE。仅当不存在未解决的依赖项问题时,此命令才会删除软件包。例如,只要有其他程序需要 Tcl/Tk,理论上就不能删除它。即使是在这种情况下,RPM 也会向数据库寻求帮助。如果出于任何原因无法进行此删除操作(即使不存在其他依赖项),则最好使用选项 --rebuilddb 重构建 RPM 数据库。

6.2.3 增量 RPM 软件包 # 

增量 RPM 软件包包含旧版本和新版本的 RPM 软件包之间的差别。在旧 RPM 上应用增量 RPM 将得到全新的 RPM。不需要旧 RPM 的副本,因为增量 RPM 也可以与已安装的 RPM 一起工作。增量 RPM 软件包的大小甚至比补丁 RPM 小,这有利于通过互联网传送更新软件包。缺点是,涉及增量 RPM 的更新操作与使用纯粹 RPM 或补丁 RPM 进行更新的情况相比,占用的 CPU 周期要长得多。

makedeltarpm 和 applydelta 二进制文件是增量 RPM 套件(软件包 deltarpm)的一部分,可帮助您创建和应用增量 RPM 软件包。使用以下命令可以创建名为 new.delta.rpm 的增量 RPM。以下命令假设 old.rpm 和 new.rpm 是存在的:

tux > sudo makedeltarpm old.rpm new.rpm new.delta.rpm

如果旧软件包已经安装,则使用 applydeltarpm 可以从文件系统重新构建新的 RPM:

tux > sudo applydeltarpm new.delta.rpm new.rpm

如果不访问文件系统而从旧 RPM 得到它,请使用 -r 选项:

tux > sudo applydeltarpm -r old.rpm new.delta.rpm new.rpm

关于技术详细信息,请参见 /usr/share/doc/packages/deltarpm/README。

6.2.4 RPM查询 # 

带 -q 选项的 rpm 将启动查询,如此用户便可查看 RPM 存档(通过添加选项 -p)并查询已安装软件包的 RPM 数据库。可以使用多个开关指定所需信息的类型。请参见表 6.1 “基本 RPM 查询选项”。

表 6.1︰ 基本 RPM 查询选项 # 

-i

软件包信息

-l

文件列表

-f FILE

查询包含文件 FILE 的软件包(必须使用 FILE 指定完整路径)

-s

带有状态信息的文件列表(间接指定 -l)

-d

仅列出文档文件(间接指定 -l)

-c

仅列出配置文件(间接指定 -l)

--dump

带有完整详细信息的文件列表(将用于 -l、-c 或 -d)

--provides

列出软件包中可被另一个软件包通过 --requires 请求的功能

--requires, -R

软件包需要的功能

--scripts

安装脚本(预安装、后安装、卸载)

例如,命令 rpm -q -i wget 显示例 6.2 “rpm -q -i wget” 中所示的信息。

例 6.2︰ rpm -q -i wget # Name : wget Version : 1.14 Release : 17.1 Architecture: x86_64 Install Date: Mon 30 Jan 2017 14:01:29 CET Group : Productivity/Networking/Web/Utilities Size : 2046483 License : GPL-3.0+ Signature : RSA/SHA256, Thu 08 Dec 2016 07:48:44 CET, Key ID 70af9e8139db7c82 Source RPM : wget-1.14-17.1.src.rpm Build Date : Thu 08 Dec 2016 07:48:34 CET Build Host : sheep09 Relocations : (not relocatable) Packager : https://www.suse.com/ Vendor : SUSE LLC URL : http://www.gnu.org/software/wget/ Summary : A Tool for Mirroring FTP and HTTP Servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line. Distribution: SUSE Linux Enterprise 15

只有当您指定带有完整路径的完整文件名时,选项 -f 才起作用。根据需要提供任意多个文件名。例如:

tux > rpm -q -f /bin/rpm /usr/bin/wget rpm-4.14.1-lp151.13.10.x86_64 wget-1.19.5-lp151.4.1.x86_64

如果只知道部分文件名,则可以使用外壳脚本,如例 6.3 “搜索软件包的脚本”所示。当运行所显示的脚本时,将部分文件名以参数的形式传递给脚本。

例 6.3︰ 搜索软件包的脚本 # #! /bin/sh for i in $(rpm -q -a -l | grep $1); do echo "\"$i\" is in package:" rpm -q -f $i echo "" done

rpm -q --changelog PACKAGE 命令会按日期排序显示有关特定软件包的详细更改信息列表。

借助已安装的 RPM 数据库,可以进行校验检查。使用 -V 或 --verify 启动这些检查。将 rpm 与此选项搭配使用,将显示软件包中自安装后已更改的所有文件。rpm 使用八位字符符号来提供有关以下更改的提示:

表 6.2︰ RPM 校验选项 # 

5

MD5 校验和

S

文件大小

L

符号链接

T

修改时间

D

主要和次要设备编号

U

所有者

G

M

方式(权限和文件类型)

对于配置文件,将输出字母 c。例如,对于 /etc/wgetrc(wget 软件包)的更改:

tux > rpm -V wget S.5....T c /etc/wgetrc

RPM 数据库的文件被放置在 /var/lib/rpm 中。如果分区 /usr 的大小为 1 GB,则此数据库可能会占用将近 30 MB,特别是在完全更新之后。如果数据库比预期大得多,则最好使用选项 --rebuilddb 重构建数据库。在执行此操作之前,制作旧数据库的备份。cron 脚本 cron.daily 每天制作数据库的副本(用 gzip 打包)并将这些副本储存在 /var/adm/backup/rpmdb 中。副本的数目是由 /etc/sysconfig/backup 中的变量 MAX_RPMDB_BACKUPS(默认值为 5)控制的。对于 1 GB 的 /usr,单个备份的大小大约为 1 MB。

6.2.5 安装和编译源软件包 # 

所有源软件包都带有 .src.rpm 扩展名(源 RPM)。

注意:安装的源软件包

源软件包可以从安装媒体复制到硬盘并使用 YaST 解压缩。但是,在软件包管理器中它们不会被标记为已安装 ([i])。这是因为源软件包不是在 RPM 数据库中输入的。只有已安装的操作系统软件列在 RPM 数据库中。“安装”源软件包时,只将源代码添加到系统中。

以下目录必须可用于 /usr/src/packages 中的 rpm 和 rpmbuild(除非在诸如 /etc/rpmrc 这样的文件中指定自定义设置):

SOURCES

代表原始源(.tar.bz2 或 .tar.gz 文件等)和发行版特定的调整(大多数为 .diff 或 .patch 文件)

SPECS

代表 .spec 文件,类似于元 Makefile,该文件控制构建进程

BUILD

在此目录中解压缩、增补和编译所有源

RPMS

储存完整的二进制软件包的位置

SRPMS

这里是源 RPM

使用 YaST 安装源软件包时,所有必需的组件都安装在 /usr/src/packages 中:源和调整项位于 SOURCES 中,相关的 .spec 文件位于 SPECS 中。

警告:系统完整性

不要对系统组件(glibc、rpm 等)进行试验,因为这样做会影响系统的稳定性。

下面的示例使用 wget.src.rpm 软件包。安装源软件包后,应具有类似以下列表中的文件:

/usr/src/packages/SOURCES/wget-1.19.5.tar.bz2 /usr/src/packages/SOURCES/wgetrc.patch /usr/src/packages/SPECS/wget.spec

rpmbuild -bX /usr/src/packages/SPECS/wget.spec 会启动编译。X 是通配符,代表构建进程的不同阶段(有关详细信息,请参见 --help 的输出或 RPM 文档)。以下内容只是简要描述:

-bp

在 /usr/src/packages/BUILD 中准备源:解压和打补丁。

-bc

执行与 -bp 相同的操作,但还进行编译。

-bi

执行与 -bp 相同的操作,但还安装生成的软件。注意:如果软件包不支持 BuildRoot 功能,则可能会重写配置文件。

-bb

执行与 -bi 相同的操作,但还创建二进制软件包。如果编译成功,二进制软件包应该在 /usr/src/packages/RPMS 中。

-ba

执行与 -bb 相同的操作,但还创建源 RPM。如果编译成功,二进制软件包应该在 /usr/src/packages/SRPMS 中。

--short-circuit

跳过某些步骤。

现在可以使用 rpm -i 或最好使用 rpm -U 来安装创建的二进制 RPM。使用 rpm 进行安装使它显示在 RPM 数据库中。

请记住,规范文件中的 BuildRoot 指令已弃用。如果您仍然需要此功能,请使用 --buildroot 选项作为替代方法。

6.2.6 使用 build 编译 RPM 软件包 # 

许多软件包存在的风险是构建进程中会将许多不需要的文件添加到正在运行的系统中。为防止发生这种情况,请使用 build,它将创建构建软件包的已定义环境。要建立这一 chroot 环境,build 脚本必须和完整的软件包树结构一起提供。可以通过 NFS 或从 DVD 使用硬盘上的此树。使用 build --rpms DIRECTORY 设置位置。与 rpm 不同,build 命令在源目录中查找 .spec 文件。要用系统中 /media/dvd 下挂载的 DVD 构建 wget(如上例所示),请以 root 用户身份使用以下命令:

root # cd /usr/src/packages/SOURCES/ root # mv ../SPECS/wget.spec . root # build --rpms /media/dvd/suse/ wget.spec

随后,将在 /var/tmp/build-root 建立一个最小的环境。在此环境中构建软件包。完成后,生成的软件包位于 /var/tmp/build-root/usr/src/packages/RPMS 中。

build 脚本提供多个其他选项。例如,使脚本优先选择您自己的 RPM、忽略构建环境的初始化或者将 rpm 命令限制在上述阶段之一。使用 build --help 并通过阅读 build 手册页来访问更多信息。

6.2.7 用于 RPM 存档和 RPM 数据库的工具 # 

Midnight Commander (mc) 可以显示 RPM 存档的内容并复制部分内容。它将存档表示为虚拟文件系统,提供 Midnight Commander 所有常用的菜单选项。使用 F3 键显示 HEADER。使用光标键和 Enter 键查看存档结构。使用 F5 键复制部分存档。

拥有全部功能的软件包管理器将作为 YaST 模块提供。有关详细信息,请参见第 21 章 “安装或去除软件”。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有